<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // "use strict";
        //Object方法
        let user={
            name:"唐玮",
            age:18
        };
        // console.log(JSON.stringify(Object.getOwnPropertyDescriptor(user,"name"),null,2));
        console.log(JSON.stringify(Object.getOwnPropertyDescriptors(user),null,2));
//         {
//   "name": {
//     "value": "唐玮", //值
//     "writable": true,  //是否可以更改
//     "enumerable": true, //是否可以遍历
//     "configurable": true //是否可以重新配置，是否可以删除
                            //不能在原来的配置上面更改，不能重新设置属性的内容
//   },
//   "age": {
//     "value": 18,
//     "writable": true,
//     "enumerable": true,
//     "configurable": true
//   }
// }
        //设置属性的内容(如果有：就相当于覆盖原来的属性，如果没有就相当于加上一个属性)
    //   Object.defineProperty(user,"name",{
    //       value:"sb", //value属性改变了"name"的值
    //       writable:false,
    //       enumerable:false,
    //       configurable:true
    //   });

      console.log(user.name);//sb
     
      //上面设置writable为false，现在来设置一下
      user.name="250";
      console.log(user);//{name: 'sb', age: 18} 没有改成功 ，如果使用严格模式，就要报错


      //是否可以遍历
//   for (const key in user) {
//        console.log(key); //只有key访问的到，name被false了
//   }
//    console.log(Object.entries(user));

//    for(const [k,v] of Object.entries(user)){
//        console.log(k,v); //age 18 没有name
//    }

//是否可以删除
delete user.name;
console.log(user); //{age:18}



//属性设置的时候，还可以批量设置
// Object.defineProperties(user,{
// "name":{
//        value:....,
//        writable:....,
//        enumerable:,,,,,
//        configurable:....
       
// },
// "age":{
//        ......
// }

// })

   </script>
</body>
</html>